MATLABweek3(图像视角下的矩阵运算)

MATLABweek3(图像视角下的矩阵运算)

存放次序

按照列存储

1710288199322

例题:构造矩阵A

1
2
3
4
A=[2 3 4;
5 6 7]

A=[2:4;5:7]

常用矩阵构造函数

名称 作用
zeros(m,n) 生成m*n的全0矩阵
ones(m,n) 生成m*n的全1矩阵
rand(m,n) 在0-1之间均匀分布的随机矩阵
randn(m,n) 生成满足正态分布的随机矩阵
eye(m,n) 单位矩阵(仅主对角线元素全为1)

使用图像举例

图像采用离散形式保存——矩阵

例如分辨率为1040*1920的彩色图像,可以由三个1024*1920矩阵保存,可以再得到一张二维的灰度矩阵,每个元素的范围是(未归一化0-255,对应黑-白,)

1
2
3
4
5
image1 = imread("test_image.png");% 读取图像得到三维矩阵
image2 = rgb2gray(image1);% 转为灰度图,变为二维矩阵
imshow(image1)
figure% 图像窗口
imshow(image2)
1710289642047
1710289948566

再使用size()命令,可以得到

1
2
3
4
5
6
7
8
9
10
11
>>size(image1)
>>ans =

1040 1920 3

>>size(image2)
>>ans =

1040 1920


读取矩阵元素

  1. 全下标法,可以取一个或多个
  2. 单下标法,相当于c语言中高维数组实际上是线性存储的,可以将其线性展开(不介绍,注意matlab是按列保存的)
1
2
3
a=image2(10,100)% 矩阵某个元素
b=image2(10:100,10:100)% 矩阵10-100行和10-100列组成的子矩阵
imshow(b)% 展示局部图
1710291057474

例子:取第10行到100行所有列

1
2
3
4
c = image2(10:100,:);
% 未写明为最大宽度,也可写为c = image2(10:100,1:end);
% 注意列表写法是闭区间
imshow(c)
1710291216908

拼接

如果a,b为同型矩阵,使用[a,b]水平拼接,[a;b]为竖直拼接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
% 读图
image1_1 = imread("test_image1.png");% 读取图像得到三维矩阵
image1_2 = rgb2gray(image1_1);% 转为灰度图,变为二维矩阵
image2_1 = imread("test_image2.png");
image2_2 = rgb2gray(image2_1);
image1_3=image1_2(1:1035,:)
% 由于两张图象大小不一样一个是1040*1920一个是1035*1920
% 这里截取一部分(可以在变量窗口看或者使用size)
%展示原始图像
figure
imshow(image1_3)
figure
imshow(image2_2)
% 展示拼接图像
image3 = [image1_3,image2_2]
figure
imshow(image3)
image4 = [image1_3;image2_2]
figure
imshow(image4)
1710291928083
1710291867893

小练习:

把图像的某部分变黑

1
2
3
4
tmp = image1_3;
tmp(1:200,1:200)=0;
figure
imshow(tmp)

矩阵的加减可视化

1
2
3
4
5
6
image5 = image1_3+image2_2
figure
imshow(image5)
image6 = image1_3-image2_2
figure
imshow(image6)
1710292478774

矩阵的其他运算

  1. 求行列式值:det(a)
  2. 求矩阵的逆矩阵:inv(a)矩阵的除法,正反斜杠运算不同,但都相当于求逆相乘,见前章节
  3. 求秩:rank(a)
  4. 乘方^,开放sqrtm(a)
  5. 转置,transpose(a),只是转置,不是共轭转置

例:求方程组的解

1710292887489

小练习

1710294121703
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
%% 
clear
close all
clc

image1_1 = imread("test_image1.png");% 读取图像得到三维矩阵
image1_2 = rgb2gray(image1_1);% 转为灰度图,变为二维矩阵
image2_1 = imread("test_image2.png");
image2_2 = rgb2gray(image2_1);
image1_3=image1_2(1:1035,:)
I1=image1_3;
I2=image2_2;
I3=I2;

a1=I1(10,12);
I1_PART=I1(100:200,100:200);
I4=I2;
I4(100,1:end)=0;
I2_I3=[I2,I3];
I2_I3_=I2-I3;

figure
imshow(I1)
figure
imshow(I4)
figure
imshow(I2_I3)
figure
imshow(I2_I3_)

运行结果

1710294166166
1710294321521

变量区主要看a的值;

注意figure2的黑线;

由于I3=I2,故figure4为全黑